package api

import (
	"batbat-backend/app/model"
	"batbat-backend/app/service"
	"batbat-backend/library/response"
	"github.com/gogf/gf/errors/gerror"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
)

// GameFavor 游戏收藏API接口
var GameFavor = gameFavorApi{}

type gameFavorApi struct{}

// FavorGame
// @summary 用户收藏一个游戏
// @tags    游戏
// @param 	Authorization header string true "token"
// @param	id path int true "游戏id"
// @produce json
// @success 200 {object} response.JsonResponse{data=bool}
// @router  /game/{id}/favor [POST]
func (gf *gameFavorApi) FavorGame(r *ghttp.Request) {
	// 获取收藏的游戏id
	id := r.GetUint("id")
	if id == 0 {
		response.Error(r, gerror.New("路径参数有误, 请检查参数`id`"))
	}
	// 获取用户上下文
	var user *model.UserContext
	err := r.GetCtxVar(model.UserContextKey).Scan(&user)
	if err != nil {
		g.Log().Ctx(r.Context()).Errorf("获取用户上下文发生错误: %v", err)
		response.Error(r, gerror.New("收藏失败"))
	}
	// 收藏游戏
	err = service.GameFavor.FavorGame(r.Context(), user.Id, id)
	if err != nil {
		response.Error(r, err)
	}
	response.Success(r, true)
}

// UnFavorGame
// @summary 用户取消收藏一个游戏
// @tags    游戏
// @param 	Authorization header string true "token"
// @param	id path int true "游戏id"
// @produce json
// @success 200 {object} response.JsonResponse{data=bool}
// @router  /game/{id}/favor [DELETE]
func (gf *gameFavorApi) UnFavorGame(r *ghttp.Request) {
	// 获取收藏的游戏id
	id := r.GetUint("id")
	if id == 0 {
		response.Error(r, gerror.New("路径参数有误, 请检查参数`id`"))
	}
	// 获取用户上下文
	var user *model.UserContext
	err := r.GetCtxVar(model.UserContextKey).Scan(&user)
	if err != nil {
		g.Log().Ctx(r.Context()).Errorf("获取用户上下文发生错误: %v", err)
		response.Error(r, gerror.New("取消收藏失败"))
	}
	// 收藏游戏
	err = service.GameFavor.UnFavorGame(r.Context(), user.Id, id)
	if err != nil {
		response.Error(r, err)
	}
	response.Success(r, true)
}
